/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package main;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

/**
 *
 * @author Danilo
 */
public class Main
{
    public static void main(String[] args)
    {
        Deck deck = new Deck();
        Jogador jog = new Jogador(deck);
        Jogador boot = new Jogador(deck);
        Mesa mesa = new Mesa();
        Carta cartaBaixadaJog, cartaBaixadaBoot, cartaTopoMesa;
        cartaBaixadaJog = new Carta();
        Scanner scan = new Scanner(System.in);
        List<Carta> cartasCompativeis;
        Carta comprada;
        int valorCartaBaixada;
        String corCartaBaixada, tipoCartaBaixada;
        String textoCartasCompativeis;
        int iteracoes = 0;
        
        while(true)
        {
            mesa.adicionaCarta(deck.compraCartaTopo());
            
            try
            {
                cartaTopoMesa = mesa.montante.get(0); // a última carta usada (que está no cemitério) é pega pela var cartaTopoMesa
            } catch (IndexOutOfBoundsException ibe)
            {
//                iteracoes++;
                System.out.println("iteracoes: " + iteracoes);
                cartaTopoMesa = null;
            }
            
            if(cartaTopoMesa == null)
            {
                System.out.println("Mesa: VAZIO");
            }
            else
            {
                System.out.println("Mesa: " + cartaTopoMesa.toString());
            }
            
            System.out.println("Sua mao: " + jog.exibeMao());
//            

            textoCartasCompativeis = jog.exibeCartasCompativeis(cartaTopoMesa);
            System.out.println("textoCartasCompativeis: " + textoCartasCompativeis);
            
            if(textoCartasCompativeis.equals(""))
            {
                System.out.println("Voce nao tem cartas compativeis... Compre uma carta!");
                jog.compraCarta(deck, 1);
            }
            
            textoCartasCompativeis = jog.exibeCartasCompativeis(cartaTopoMesa);
            
            if(textoCartasCompativeis.equals(""))
            {
                System.out.println("Jogada passada!");
            }
            else
            {
                boolean loop = false;
                
                do
                {
                    System.out.print("Cartas Compativeis: " + textoCartasCompativeis);
                    System.out.println();
                    System.out.println("Baixe uma carta.");
                    System.out.println("Valor: ");
                    valorCartaBaixada = scan.nextInt();
                    System.out.println("Cor: ");
                    corCartaBaixada = scan.next();
                    
                    cartaBaixadaJog = jog.capturaCarta(valorCartaBaixada, corCartaBaixada);
                    
                    if(cartaBaixadaJog != null)
                    {
                        loop = false;
                    }
                    else
                    {
                        System.out.println("Carta Invalida!");
                    }
                    
                } while(loop);
                
                mesa.montante.add(cartaBaixadaJog);
                
                // turno do CPU
                
                
                
                
                
                
                
            }
        }
        
        
        
        
        
        
        
    }

//    private static void inicializaDeck(List<String> deck)
//    {
//        // criando todos os tipos de cartas
//        List<String> cartasNumerosCores = new ArrayList<>(40);
//        List<String> cartasBlockCores = new ArrayList<>(4);
//        List<String> cartasNeutral = new ArrayList<>(4);
//        List<String> cartasFour = new ArrayList<>(4);
//        List<String> cartasTwo = new ArrayList<>(4);
//        
//        for(int i = 0; i <= 9; i++)
//        {
//            cartasNumerosCores.add(i + "|B");
//            cartasNumerosCores.add(i + "|Y");
//            cartasNumerosCores.add(i + "|R");
//            cartasNumerosCores.add(i + "|G");
//        }
//        
//        for(int i = 0; i < 4; i++)
//        {
//            cartasNeutral.add("NEUTRAL");
//            cartasFour.add("FOUR");
//        }
//        
//        cartasBlockCores.add("TWO|R");
//        cartasBlockCores.add("TWO|Y");
//        cartasBlockCores.add("TWO|G");
//        cartasBlockCores.add("TWO|B");
//        
//        cartasBlockCores.add("BLOCK|R");
//        cartasBlockCores.add("BLOCK|Y");
//        cartasBlockCores.add("BLOCK|G");
//        cartasBlockCores.add("BLOCK|B");
//        
//        // adicionando todos os tipos de carta no deck
//        deck.addAll(cartasNumerosCores);
//        deck.addAll(cartasBlockCores);
//        deck.addAll(cartasNeutral);
//        deck.addAll(cartasFour);
//        deck.addAll(cartasTwo);
//        
//        // embaralhando o deck
//        sorteiaDeck(deck);    
//    }
//
//    private static void sorteiaDeck(List<String> deck)
//    {
//        Collections.shuffle(deck, new Random());
//    }

    private static void compraCartas(List<String> mao, List<String> deck, int numeroCartas)
    {
        for(int i = 0; i < numeroCartas; i++)
        {
            // pega sempre a carta do top do deck que será passada para a mao. Depois, remova a carta da lista deck
            mao.add(deck.get(0));
            deck.remove(0);
        }
    }

    

//    private static void tratamentoCartasIncompativeis(Carta cartaTopoMesa, Jogador jog, Deck deck, boolean humano)
//    {
//        Carta comprada;
//        
//        do
//        {
//            comprada = deck.compraCartaTopo();
//            
//            if(comprada.isCompatible(cartaTopoMesa))
//            {
//                
//            }
//        }
//    }

    
}
